PLTF-2513: add laminar services to default NO_PROXY in openhands chart#636
Merged
Conversation
When proxy_enabled=1 and analytics_enabled=1, the enterprise-server pod posts traces to http://laminar-app-server-service:8000/v1/traces. The bare in-cluster short name did not match the existing NO_PROXY seed or its .svc/.cluster.local suffix rules, so the request was routed through HTTP_PROXY and dropped when the proxy could not resolve cluster DNS. Append the 12 laminar in-cluster short names to $computedNoProxy when analytics_enabled=1, matching how the laminar services are conditionally deployed.
all-hands-bot
approved these changes
May 15, 2026
Contributor
all-hands-bot
left a comment
There was a problem hiding this comment.
🟢 Good taste - Clean fix with excellent evidence.
[RISK ASSESSMENT]
- [Overall PR]
⚠️ Risk Assessment: 🟢 LOW
Single-line config change that correctly adds in-cluster laminar services to NO_PROXY when analytics is enabled. Well-gated, matches the condition for deploying laminar services, and thoroughly tested with production verification showing traces now flow directly to laminar-app-server without being routed through the external proxy.
VERDICT:
✅ Worth merging: Solves a real production bug with the right approach.
KEY INSIGHT:
Proper NO_PROXY configuration for in-cluster services is essential when using HTTP proxies in Kubernetes - this fix correctly exempts internal services from external proxy routing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When
proxy_enabled=1andanalytics_enabled=1, conversation traces from the enterprise-server and runtime pods fail to reach Laminar. The trace POST goes tohttp://laminar-app-server-service:8000/v1/traces, but the bare in-cluster short name is not in the computedNO_PROXYallowlist, so the request is routed throughHTTP_PROXYand dropped when the proxy cannot resolve cluster-internal DNS.Root cause
replicated/openhands.yamlseeds$computedNoProxywith an allowlist of in-cluster short names plus.svc/.cluster.localsuffix rules.laminar-app-server-serviceis a bare hostname (no dots), so neither suffix rule matches, and it was not in the short-name allowlist. The enterprise-server pod therefore proxies trace POSTs out of the cluster.Observed on the replicated-01 AWS embedded-cluster install with an ngrok→mitmproxy
HTTP_PROXY. mitmdump logged:Fix
Append the 12 laminar in-cluster short names to
$computedNoProxy, gated onanalytics_enabled=1so installs without Laminar do not get a bloatedNO_PROXY:Test plan
Verified on replicated-01 AWS embedded-cluster install with
proxy_enabled=1,analytics_enabled=1, andHTTP_PROXY/HTTPS_PROXYpointed athttp://8.tcp.ngrok.io:25057(ngrok→mitmproxy). Userno_proxyfield left unset.NO_PROXYon the enterprise-server pod contains all 12 laminar short namesOH_AGENT_SERVER_ENV(propagated to runtime pods) contains the same set.Conversation started, trace visible in Laminar UI
Conversation: https://app.replicated-01.aws.aivong.platform-team.all-hands.dev/conversations/d596ecc6300e4cebadc023c20ea199be
Trace in Laminar: https://analytics.app.replicated-01.aws.aivong.platform-team.all-hands.dev/project/9c91ea8c-ae9c-455e-a51a-e659f300fb61/traces?pastHours=24&traceId=17dc9597-e350-cc00-27a8-0cbc3df4a8da&chat=true
laminar-app-serverlogs show/v1/tracesPOSTs from inside the clusterSource IP
10.244.43.114is the agent runtime podruntime-phnaihibosdnvmtt-588ff889b9-x2w5q, confirming traces are flowing pod→service over the in-cluster network (not via the external proxy). All responses are200 OK. No matchingPOST http://laminar-app-server-service:8000/v1/tracesfailures in mitmdump.Install with
proxy_enabled=1andanalytics_enabled=0; confirmNO_PROXYdoes not include the laminar namesNot yet retested on this install (would require disabling analytics and reinstalling). Confirmed by inspection of the template: the laminar append is gated on
{{repl if ConfigOptionEquals "analytics_enabled" "1" }}, matching the gate that conditionally deploys the laminar services themselves (replicated/openhands.yaml:752).Workaround (existing installs)
Append
laminar-app-server-serviceto theNO_PROXYfield in the Replicated Admin Console config and redeploy.